def GetClosureConcept(intent, generatorConcept, L):
    # 假设该函数是通过从 L 中获取与 intent 匹配的最小概念
    # 你可以根据自己的逻辑实现这个函数
    for concept in L.concepts.values():
        if set(intent).issubset(set(concept.intent)):
            return concept
    return generatorConcept  # 如果没有找到符合的概念，则返回原始生成器
def is_subset(intent1, intent2):
    """检查 intent1 是否是 intent2 的子集"""
    return set(intent1).issubset(set(intent2))

def intersection(intent1, intent2):
    """计算两个意图的交集"""
    return list(set(intent1).intersection(set(intent2)))

def FastAddIntent(intent, generatorConcept, L, n):
    # 步骤1: 标记 generatorConcept 的 doIntent 和 MaximalConcept 字段
    generatorConcept.doIntent = intent
    generatorConcept.MaximalConcept = GetClosureConcept(intent, generatorConcept, L)

    # 步骤2: 获取外延值包含于该概念的最小概念
    generatorConcept = GetClosureConcept(intent, generatorConcept, L)
    if generatorConcept.doIntent == intent:
        return generatorConcept  # 返回最小概念

    # 步骤3: 获取 generatorConcept 的所有孩子节点作为候选节点
    candidates = generatorConcept.get_children()

    # 步骤4: 判断每一个候选孩子节点 candidate
    for candidate in candidates:
        if is_subset(intent, candidate.intent):
            continue  # 如果外延值包含关系，跳过此候选节点（修改概念）

        # 步骤5: 如果 candidate 尚未被访问过，进行新概念的生成
        if not candidate.visited:
            # 计算交集
            new_intent = intersection(intent, candidate.intent)
            new_concept = FastAddIntent(new_intent, candidate, L, n)  # 递归生成新概念
            candidate.NewConcept = new_concept
            candidate.visited = True
            candidate = new_concept  # 更新候选节点为新生成的概念
        else:
            candidate = candidate.NewConcept  # 使用已生成的新概念

        # 步骤6: 处理 newConcept 的孩子节点
        for child in new_concept.get_children():
            if is_subset(candidate.intent, child.intent):
                continue  # 跳出循环
            if is_subset(child.intent, candidate.intent):
                new_concept.remove_child(child)  # 删除不必要的孩子节点
                new_concept.add_child(candidate)  # 添加新的候选孩子节点

    # 步骤7: 将 newConcept 与孩子节点建立关系
    for child in new_concept.get_children():
        child.remove_parent(generatorConcept)  # 删除孩子与 generatorConcept 的关系
        child.add_parent(new_concept)  # 新增孩子与 newConcept 的关系

    generatorConcept.add_child(new_concept)  # 生成器与新概念建立关系

    # 步骤8: 返回新生成的概念
    return new_concept
